package cn.wolfcode.trip.app.Filter;

import cn.wolfcode.trip.base.util.UploadUtil;
import org.apache.commons.io.FileUtils;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class QiniuImagesFilter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse response, FilterChain filterChain) throws IOException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        String uri = req.getRequestURI();
        uri=uri.replace("/qiniuUpload/","");

        URL url = new URL(UploadUtil.QINIU_PATH+uri);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");

        conn.setConnectTimeout(5 * 1000);

        //通过输入流获取图片数据
        InputStream inStream = conn.getInputStream();

        try {
            //得到图片的二进制数据，以二进制封装得到数据，具有通用性
            byte[] data = readInputStream(inStream);
            if (data.length>0) {
                response.getOutputStream().write(data);
            }else {
                filterChain.doFilter(req,response);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


      /*  File file =new File(UploadUtil.QINIU_PATH+uri);
        if (file.exists()) {
            response.getOutputStream().write(uri.getBytes());
        }else {
            filterChain.doFilter(req,response);
        }*/
    }

    public static byte[] readInputStream(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        //创建一个Buffer字符串
        byte[] buffer = new byte[1024];
        //每次读取的字符串长度，如果为-1，代表全部读取完毕
        int len = 0;
        //使用一个输入流从buffer里把数据读取出来
        while( (len=inStream.read(buffer)) != -1 ){
            //用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
            outStream.write(buffer, 0, len);
        }
        //关闭输入流
        inStream.close();
        //把outStream里的数据写入内存
        return outStream.toByteArray();
    }



    @Override
    public void destroy() {

    }
}
